#ifndef DASHBOARDDATAWIDGET_H
#define DASHBOARDDATAWIDGET_H

#include <QWidget>
#include <QScrollArea>
#include <QGridLayout>
#include <QLabel>
#include <QFrame>
#include <QMap>
#include "core/Channel.h"
#include "core/DataPoint.h"

namespace ModbusPlexLink {

/**
 * @brief 数据点卡片 - 单个数据点的可视化展示
 */
class DataPointCard : public QFrame {
    Q_OBJECT

public:
    explicit DataPointCard(const QString& tagName, const DataPoint& point, QWidget *parent = nullptr);

    void updateData(const DataPoint& point);
    QString getTagName() const { return m_tagName; }

private:
    void setupUi();
    QString formatValue(const QVariant& value) const;
    QColor getQualityColor(DataQuality quality) const;

    QString m_tagName;
    DataPoint m_dataPoint;

    QLabel* m_tagLabel;
    QLabel* m_valueLabel;
    QLabel* m_unitLabel;
    QLabel* m_qualityIndicator;
    QLabel* m_timestampLabel;
};

/**
 * @brief 仪表盘风格数据展示组件
 *
 * 功能：
 * - 卡片网格形式展示数据点
 * - 实时更新数据值
 * - 质量状态可视化
 * - 自动布局和滚动
 */
class DashboardDataWidget : public QWidget {
    Q_OBJECT

public:
    explicit DashboardDataWidget(QWidget *parent = nullptr);
    ~DashboardDataWidget();

    // 设置显示的通道
    void setChannel(Channel* channel);

    // 刷新显示
    void refreshDisplay();

    // 清空显示
    void clear();

private slots:
    void onDataUpdated(const QString& tagName, const DataPoint& point);
    void onAutoRefreshTimeout();

private:
    void setupUi();
    void rebuildCards();
    void addOrUpdateCard(const QString& tagName, const DataPoint& point);

    Channel* m_channel;

    // UI组件
    QScrollArea* m_scrollArea;
    QWidget* m_contentWidget;
    QGridLayout* m_gridLayout;
    QLabel* m_emptyLabel;

    // 数据卡片
    QMap<QString, DataPointCard*> m_cards;

    // 自动刷新
    QTimer* m_refreshTimer;
};

} // namespace ModbusPlexLink

#endif // DASHBOARDDATAWIDGET_H
